package com.implementsystem.prestacontas.timer;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import com.implementsystem.prestacontas.municipios.client.MunicipioClient;
import com.implementsystem.prestacontas.municipios.entity.Municipio;
import com.implementsystem.prestacontas.municipios.entity.RespostaMunicipio;
import com.implementsystem.prestacontas.municipios.session.MunicipioSession;
import com.implementsystem.prestacontas.notaspagamento.client.NotasPagamentosClient;
import com.implementsystem.prestacontas.notaspagamento.entity.NotasPagamento;
import com.implementsystem.prestacontas.notaspagamento.entity.RespostaNotasPagamento;
import com.implementsystem.prestacontas.notaspagamento.session.NotasPagamentoSession;
import com.implementsystem.prestacontas.orgaos.client.OrgaoClient;
import com.implementsystem.prestacontas.orgaos.dao.OrgaoDao;
import com.implementsystem.prestacontas.orgaos.entity.Orgao;
import com.implementsystem.prestacontas.orgaos.entity.Resposta;
import com.implementsystem.prestacontas.orgaos.session.OrgaoSession;

@Stateless
public class GerenciaAtualizacoes {
	
	@EJB
	MunicipioClient clientMunicipio;
	@EJB
	MunicipioSession sessionMunicipio;
	@EJB
	OrgaoClient clientOrgao;
	@EJB
	OrgaoSession sessionOrgao;
	@EJB
	OrgaoDao dao;
	@EJB
	NotasPagamentosClient clientNotasPagamento;
	@EJB
	NotasPagamentoSession sessionNotasPagamento;
	
	
	public void atualizar() throws Exception{
		
		atualizaMunicipio();
		atualizaOrgao();
		//atualizaNotasPagamento();
	}
	
	public void atualizaMunicipio() throws Exception{
		
		RespostaMunicipio resposta = clientMunicipio.listaMunicipios();
		
		for (Municipio municipio : resposta.getMunicipios()) {
			
			if(!sessionMunicipio.findByCodigoMunicipio(municipio.getCodigo())){
				sessionMunicipio.save(municipio);
			} else 
				System.out.println("encontrou o municipio: "+municipio.getNome());
			
		}
	}
	
	public void atualizaOrgao() throws Exception{
		Resposta resposta = clientOrgao.listaOrgaos();
		
		for (Orgao orgao : resposta.getOrgaos()) {
			if(!sessionOrgao.findByCodigoOrgao(orgao)){
				sessionOrgao.save(orgao);
			}else{
				Orgao org = dao.findByCodigoOrgao(orgao.getCodigoOrgao());
				orgao.setId(org.getId());
				sessionOrgao.update(orgao);
			}
		}
	}

	public void atualizaNotasPagamento() throws Exception{
		RespostaNotasPagamento resposta = clientNotasPagamento.listarNotasPagamento();
		
		for (NotasPagamento notaPagamento : resposta.getList()) {
			if (!sessionNotasPagamento.findByNumeroNotaPagamento(notaPagamento)) {
				sessionNotasPagamento.save(notaPagamento);
			} else{
				System.out.println("encontrou a nota de Pagamento: "+notaPagamento.getNumeroNotaPagamento());
			}
		}
	}
}
